<template>
	<view class="wx-entry-container">
		<view class="header">
			<image class="logo" src="/static/img/logo.png" mode="aspectFit"></image>
			<text class="title">PetCloud</text>
			<text class="subtitle">宠物云平台</text>
		</view>
		
		<view class="content">
			<view class="button-area">
				<button 
					class="wx-button" 
					type="primary" 
					:loading="isLoading"
					:disabled="isLoading"
					open-type="getUserInfo"
					@tap="handleLogin"
					@getuserinfo="onGetUserInfo">
					<u-icon name="weixin-fill" color="#ffffff" size="36"></u-icon>
					<text>{{ isLoading ? '登录中...' : '微信一键登录' }}</text>
				</button>
			</view>
			
			<view class="tips">
				<text>登录代表您已同意</text>
				<navigator url="/pages/agreement/privacy" class="link">《隐私政策》</navigator>
				<text>和</text>
				<navigator url="/pages/agreement/service" class="link">《用户协议》</navigator>
			</view>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			isLoading: false,
			errorMsg: '',
			userInfo: null
		}
	},
	onLoad() {
		// 检查是否已登录
		this.checkLoginStatus();
	},
	methods: {
		// 检查登录状态
		async checkLoginStatus() {
			try {
				const user = await this.$leanCloud.user.getCurrent();
				if (user) {
					// 已登录，直接跳转到主页
					// this.navigateToIndex();
				}
			} catch (error) {
				console.error('检查登录状态失败:', error);
			}
		},
		
		// 获取用户信息回调
		onGetUserInfo(e) {
			console.log('获取用户信息回调:', e);
			if (e.detail.userInfo) {
				// 保存用户信息到全局数据
				if (getApp() && getApp().globalData) {
					Object.assign(getApp().globalData, {
						nickname: e.detail.userInfo.nickName,
						avatarUrl: e.detail.userInfo.avatarUrl
					});
				}
				
				// 保存用户信息
				this.userInfo = e.detail.userInfo;
			}
		},
		
		// 登录按钮点击事件
		handleLogin() {
			if (this.isLoading) return;
			
			this.isLoading = true;
			this.errorMsg = '';
			
			// 显示加载提示
			wx.showLoading({
				title: '登录中...'
			});
			console.log('微信登录');
			// 调用微信登录获取code
			wx.login({
				success: (res) => {
					if (res.code) {
						console.log('获取微信code成功:', res.code);
						this.doLogin();
					} else {
						console.error('获取微信code失败:', res);
						this.showError('登录失败，请重试');
					}
				},
				fail: (err) => {
					console.error('微信登录接口调用失败:', err);
					this.showError('网络异常，请检查连接');
				}
			});
		},
		
		// 显示错误信息
		showError(message) {
			wx.hideLoading();
			this.errorMsg = message;
			this.isLoading = false;
			wx.showToast({
				title: message,
				icon: 'none'
			});
		},
		
		// 执行登录
		async doLogin() {
			try {
				console.log('开始调用LeanCloud微信登录');
				// 确保获取最新的微信code
				const loginResult = await new Promise((resolve, reject) => {
					wx.login({
						success: (res) => {
							if (res.code) {
								console.log('doLogin内重新获取微信code成功:', res.code);
								resolve(res);
							} else {
								console.error('doLogin内获取微信code失败:', res);
								reject(new Error('微信登录code获取失败'));
							}
						},
						fail: (err) => {
							console.error('doLogin内微信登录API调用失败:', err);
							reject(err);
						}
					});
				});
				
				// 调用微信登录
				console.log('尝试调用LeanCloud wechatLogin方法');
				const result = await this.$leanCloud.user.wechatLogin();
				console.log('微信登录成功:', result);
				
				// 额外检查登录结果
				if (!result) {
					console.error('微信登录结果为空');
					throw new Error('登录失败，请重试');
				}
				
				// 检查用户token
				const sessionToken = wx.getStorageSync('leancloud_session_token');
				const userId = wx.getStorageSync('leancloud_user_id');
				console.log('登录后存储信息:', { sessionToken: !!sessionToken, userId });
				
				if (!sessionToken) {
					console.error('登录成功但未获取到会话令牌');
					throw new Error('会话令牌获取失败');
				}
				
				// 获取微信用户信息
				try {
					// 如果从按钮回调已经获取到了用户信息
					if (this.userInfo) {
						console.log('使用已经获取的用户信息:', this.userInfo);
						// 更新用户头像和昵称到LeanCloud
						await this.$leanCloud.user.updateUserInfo(this.userInfo);
						
						// 将用户信息保存到全局数据(已在onGetUserInfo中处理)
					} else {
						// 使用微信提供的API获取用户信息
						const userInfoRes = await new Promise((resolve, reject) => {
							wx.getUserInfo({
								success: res => {
									console.log('获取微信用户信息成功:', res);
									resolve(res);
								},
								fail: err => {
									console.error('获取微信用户信息失败:', err);
									// 这里不抛出错误，因为获取用户信息失败不应该阻止登录流程
									resolve(null);
								}
							});
						});
						
						// 如果成功获取用户信息，更新到LeanCloud用户资料
						if (userInfoRes && userInfoRes.userInfo) {
							console.log('更新用户资料:', userInfoRes.userInfo);
							// 更新用户头像和昵称到LeanCloud
							await this.$leanCloud.user.updateUserInfo(userInfoRes.userInfo);
							
							// 将用户信息保存到全局数据
							if (getApp() && getApp().globalData) {
								Object.assign(getApp().globalData, {
									nickname: userInfoRes.userInfo.nickName,
									avatarUrl: userInfoRes.userInfo.avatarUrl,
									isLogin: true
								});
							}
						} else {
							console.log('未能获取微信用户信息或用户拒绝授权');
						}
					}
				} catch (userInfoError) {
					console.error('处理用户信息过程中出错:', userInfoError);
					// 这里不抛出错误，因为即使更新用户信息失败，登录流程也应该继续
				}
				
				// 登录成功，跳转到首页
				wx.hideLoading();
				console.log('登录成功，即将跳转到首页');
				this.navigateToIndex();
			} catch (error) {
				console.error('微信登录过程中出错:', error);
				this.showError('登录失败: ' + (error.message || '请重试'));
			} finally {
				this.isLoading = false;
			}
		},
		
		// 跳转到首页
		navigateToIndex() {
			wx.switchTab({
				url: '/pages/index/index'
			});
		}
	}
}
</script>

<style lang="scss">
.wx-entry-container {
	height: 100vh;
	display: flex;
	flex-direction: column;
	background-color: #f8f8f8;
	
	.header {
		flex: 2;
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		padding-top: 80rpx;
		
		.logo {
			width: 180rpx;
			height: 180rpx;
			margin-bottom: 30rpx;
		}
		
		.title {
			font-size: 48rpx;
			font-weight: bold;
			color: #333;
			margin-bottom: 15rpx;
		}
		
		.subtitle {
			font-size: 32rpx;
			color: #666;
		}
	}
	
	.content {
		flex: 1;
		display: flex;
		flex-direction: column;
		justify-content: flex-end;
		padding: 0 60rpx 80rpx 60rpx;
		
		.button-area {
			margin-bottom: 50rpx;
			
			.wx-button {
				display: flex;
				flex-direction: row;
				align-items: center;
				justify-content: center;
				background-color: #07c160;
				height: 90rpx;
				border-radius: 45rpx;
				box-shadow: 0 10rpx 20rpx rgba(7, 193, 96, 0.2);
				
				text {
					margin-left: 15rpx;
					font-size: 32rpx;
				}
				
				&::after {
					border: none;
				}
			}
		}
		
		.tips {
			text-align: center;
			font-size: 24rpx;
			color: #999;
			display: flex;
			justify-content: center;
			align-items: center;
			
			.link {
				color: #5199fe;
				display: inline-block;
			}
		}
	}
}
</style> 